class SearchEngineBase:
    def __init__(self):
        pass
    #搜索器
    def add_corpus(self, file_path):  
        with open(file_path, 'rb') as fin:
            text = fin.read().decode('utf-8')
        self.process_corpus(file_path, text)
    #索引器
    def process_corpus(self, id, text):
        raise Exception('process_corpus not implemented.')
    #检索器
    def search(self, query):
        raise Exception('search not implemented.')
#用户接口
def main(search_engine):
    for file_path in ['oop/1.txt', 'oop/2.txt', 'oop/3.txt', 'oop/4.txt', 'oop/5.txt']:
        search_engine.add_corpus(file_path)
    while True:
        query = input()
        results = search_engine.search(query)
        print('found {} result(s):'.format(len(results)))
        for result in results:
            print(result)


            #继承SearchEngineBase类，并重写了 process_corpus 和 search 方法
class SimpleEngine(SearchEngineBase):
    def __init__(self):
        super(SimpleEngine, self).__init__()
        #建立索引时使用
        self.__id_to_texts = {}

    def process_corpus(self, id, text):
        #以文件路径为键，文件内容为值，形成键值对，存储在字典中，由此建立索引
        self.__id_to_texts[id] = text

    def search(self, query):
        results = []
        #依次检索字典中的键值对，如果文件内容中包含用户要搜索的信息，则将此文件的文件路径存储在 results 列表中
        for id, text in self.__id_to_texts.items():
            if query in text:
                results.append(id)
        return results

search_engine = SimpleEngine()
main(search_engine)